//性能分析，随机生成了5组数据，并且使用冒泡排序法排序。
package main

import (
	"math/rand"
	"os"
	"runtime/pprof"
	"time"
)

//随机生成几组数据
func generate(n int) []int {
	rand.Seed(time.Now().UnixNano())
	nums := make([]int, 0)
	for i := 0; i < n; i++ {
		nums = append(nums, rand.Int())
		// nums = append(nums, rand.Intn(100))
	}
	return nums
}

//冒泡排序法(内置函数可以用sort包sort.IntSlice(nums))
func bubbleSort(nums []int) {
	for i := 0; i < len(nums); i++ {
		for j := 1; j < (len(nums) - i); j++ {
			if nums[j] < nums[j-1] {
				nums[j], nums[j-1] = nums[j-1], nums[j]
			}
		}
	}
	// return nums
}

func main() {
	//参考https://geektutu.com/post/hpg-pprof.html
	//添加下面2句就可以度量CPU性能
	// pprof.StartCPUProfile(os.Stdout)
	// defer pprof.StopCPUProfile()
	//上面直接输出go run go_pprof.go > cpu.pprof

	//一般不建议上面直接输出，建议写成文件------start

	f, _ := os.OpenFile("cpu.pprof", os.O_CREATE|os.O_RDWR, 0644)
	defer f.Close()
	pprof.StartCPUProfile(f)
	defer pprof.StopCPUProfile()

	//一般不建议上面直接输出，建议写成文件------end
	//go tool pprof -http=:9999 cpu.pprof
	//如果提示 Graphviz 没有安装，则通过 brew install graphviz(MAC) 或 apt install graphviz(Ubuntu) 即可。
	//访问 localhost:9999

	n := 10
	for i := 0; i < 5; i++ {
		nums := generate(n) //随机生成
		bubbleSort(nums)
		time.Sleep(time.Second * 1)
		// fmt.Printf("%d,%d \n", i, nums)
		// fmt.Printf("%d,%d \n", i, beforeSort)
	}
	// fmt.Println("numsAll=", nums)
}
